An empirical evaluation of in-memory multi-version concurrency control